<?php


namespace App\Http\Controllers\Admin\SystemSet\AppVersion;


use App\Exceptions\BasicException;
use App\Services\Tools\ObsService;
use App\Http\Controllers\BaseController;
use App\Response\Response;
use Illuminate\Http\Request;

class VersionManagementController extends BaseController
{
    /**
     * @api {post} /system-set/app-version/management app管理模块模块创建
     * @apiVersion 0.1.0
     * @apiName 系统设置-app管理模块模块创建
     * @apiGroup 系统设置
     *
     * @apiParam {number} app_type                      app类型 1 安卓  2ios
     * @apiParam {number} android_application_type      安卓应用类型 1 气泡语音  2气泡星球
     * @apiParam {string} version                       版本号
     * @apiParam {number} install_type                  安装方式 1 上传安装包  2填写下载链接 3iOS安装地址
     * @apiParam {string} install_url                   安装地址 注：如果选择安装方式为1 该传过来的值不为字符串 为文件类型
     * @apiParam {number} update_type                   更新方式 1 强制更新  2自主更新
     * @apiParam {string} update_content                更新内容
     * @apiParam {string} pop_type                      弹窗方式 1 每次启动应用弹窗  2每天仅第一次启动弹出一次  3每周仅第一次启动弹出一次  4本次更新仅第一次启动弹出一次
     * @apiParam {string} version_status                版本状态 1 启用  2禁用
     *
     * @apiSuccessExample 成功响应
     *
     *      {"code":200,"data":true}
     *
     * @apiError 10001 参数校验失败
     *
     * @apiErrorExample 错误响应
     *
     *      {
     *          "code": 10001,
     *          "message": "errorMsg"
     *      }
     *
     */
    public function create(Request $request)
    {
        //参数校验
        $v = app('validator')->make($request->all(),
            [
                'app_type' => 'filled|in:1,2',
                'android_application_type' => 'in:1,2,3,4',
                'version' => 'filled',
                'install_type' => 'filled|in:1,2,3',
                'update_type' => 'filled|in:1,2',
                'version_status' => 'filled|in:1,2',
            ]);
        if ($v->fails()) throw new BasicException(10001, $v->errors()->first());
        $params = $request->only(['app_type', 'android_application_type', 'version', 'install_type', 'update_type', 'pop_type', 'version_status', 'install_url', 'update_content']);
        // 安卓的上传文件返回下载地址
//        if ($params['app_type'] == 1 && $params['install_type'] == 1) {
//            $frame1 = $request->file('install_url');
//            if ($frame1) {
//                $res = FileService::uploadFile($frame1, [], 'api/gift/frame', '', '');
//                if ($res) {
//                    $params['install_url'] = $res;
//                }
//            }
//        }
        $params['add_time'] = date('Y-m-d H:i:s');

        $rows = app('repo_version_management')->addManagement($params);
        if (!$rows) {
            throw new BasicException(10001, "插入失败！");
        }

        return Response::sendData(true);
    }

    /**
     * @api {put} /system-set/app-version/management app管理模块修改
     * @apiVersion 0.1.0
     * @apiName 系统设置-app管理模块修改
     * @apiGroup 系统设置
     *
     *
     * @apiParam {number} id
     * @apiParam {number} app_type                      app类型 1 安卓  2ios
     * @apiParam {number} android_application_type      安卓应用类型 1 气泡语音  2气泡星球
     * @apiParam {string} version                       版本号
     * @apiParam {number} install_type                  安装方式 1 上传安装包  2填写下载链接 3iOS安装地址
     * @apiParam {string} install_url                   安装地址 注：如果选择安装方式为1 该传过来的值不为字符串 为文件类型
     * @apiParam {number} update_type                   更新方式 1 强制更新  2自主更新
     * @apiParam {string} update_content                更新内容
     * @apiParam {string} pop_type                      弹窗方式 1 每次启动应用弹窗  2每天仅第一次启动弹出一次  3每周仅第一次启动弹出一次  4本次更新仅第一次启动弹出一次
     * @apiParam {string} version_status                版本状态 1 启用  2禁用
     *
     * @apiSuccessExample 成功响应
     *
     *      {"code":200,"data":true}
     *
     * @apiError 10001 参数校验失败
     *
     * @apiErrorExample 错误响应
     *
     *      {
     *          "code": 10001,
     *          "message": "errorMsg"
     *      }
     *
     */
    public function update(Request $request)
    {
        //参数校验
        try {
            $this->validate($request, [
                'id' => 'required|integer',
                'app_type' => 'required|in:1,2',
                'android_application_type' => 'in:1,2,3,4',
                'version' => 'required',
                'install_type' => 'required|in:1,2,3',
                'update_type' => 'required|in:1,2',
                'version_status' => 'required|in:1,2',
            ]);
        } catch (\Exception $e) {
            throw new BasicException(10001, json_encode($e->errors()));
        }

        $id = $request->input('id');
        $res = app('repo_version_management');

        $params = $request->only(['app_type', 'android_application_type', 'version', 'install_type', 'update_type', 'pop_type', 'version_status', 'install_url', 'update_content']);
        // 安卓的上传文件返回下载地址
//        if ($params['app_type'] == 1 && $params['install_type'] == 1) {
//            if (!is_string($params['install_url'])) {
//                $frame1 = $request->file('install_url');
//                if ($frame1) {
//                    $res = FileService::uploadFile($frame1, [], 'api/gift/frame', '', '');
//                    if ($res) {
//                        $params['install_url'] = $res;
//                    }
//                }
//            } else {
//                unset($params['install_url']);
//            }
//        }
        // 判断不让安卓改iOS系列操作
        $info = $res->getManagementInfo(['id'=>$id]);
        if ($params['app_type'] != $info->app_type) {
            throw new BasicException(10008, '选择安卓类型不可修改为iOS类型');
        }
        if ($params['install_type'] != 1 && empty($params['install_url'])) {
            throw new BasicException(10008, '下载/安装地址不为空');
        }

        $rows = $res->saveManagement(["id" => $id], $params);
        if (!$rows) {
            throw new BasicException(10001, "更新失败！");
        }

        return Response::sendData(true);
    }

    /**
     * @api {delete} /system-set/app-version/management app管理模块删除
     * @apiVersion 0.1.0
     * @apiName 系统设置-app管理模块删除
     * @apiGroup 系统设置
     *
     * @apiParam {string} id                       删除的id 必传
     *
     * @apiSuccessExample 成功响应
     *
     *      {"code":200,"data":true}
     *
     * @apiError 10001 参数校验失败
     *
     * @apiErrorExample 错误响应
     *
     *      {
     *          "code": 10001,
     *          "message": "errorMsg"
     *      }
     *
     */
    public function del(Request $request) {
        //参数校验
        try {
            $this->validate($request, [
                'id' => 'required|int',
            ]);

        } catch (\Exception $e) {
            throw new BasicException(10001, json_encode($e->errors()));
        }

        $id = $request->input("id");

        $rows = app('repo_version_management')->delManagement($id);
        if (!$rows) {
            throw new BasicException(10001, "删除失败！");
        }

        return Response::sendData(true);
    }

    /**
     * @api {get} /system-set/app-version/management 版本管理列表
     * @apiVersion 0.1.0
     * @apiName 系统设置-版本管理列表
     * @apiGroup 系统设置
     *
     * @apiParam {number} page 当前页数 可选
     * @apiParam {number} perPage 分页容量 可选
     * @apiParam {number} app_type app类型 1 安卓  2ios
     *
     *
     * @apiSuccessExample 成功响应
     *
     *
    {
    "code": 200,
    "data": {
    "list": [
    {
    "id(序号)": 7,
    "app_type(app类型 1 安卓  2ios)": 1,
    "android_application_type(安卓应用类型 1 气泡语音  2气泡星球)": 1,
    "version(版本号)": "v2.1",
    "install_type(安装方式 1 上传安装包  2填写下载链接 3iOS安装地址)": 1,
    "install_url(安装地址)": "http://yutangyuyin1.oss-cn-hangzhou.aliyuncs.com/api/gift/frame/f2de2cf9dca616d34f243f20e1e83a0f2sYML.jpg",
    "update_type(更新方式 1 强制更新  2自主更新)": 1,
    "update_content(更新文案)": “”,
    "pop_type(弹窗方式 1 每次启动应用弹窗  2每天仅第一次启动弹出一次  3每周仅第一次启动弹出一次  4本次更新仅第一次启动弹出一次)": 1,
    "version_status(版本状态 1 启用  2禁用)": 1,
    "add_time(创建时间)": "2021-06-25 16:53:40",
    "update_time(修改时间)": "2021-06-25 16:54:50"
    }
    ],
    "meta": {
    "page": 1,
    "limit": "10",
    "next": null,
    "total": 3
    }
    }
    }
     *
     *
     */
    public function list(Request $request)
    {
        //参数校验
        try {
            $this->validate($request, [
                'app_type' => 'filled|numeric',
                'perPage' => 'filled|numeric',
                'page' => 'filled|numeric',
            ]);
        } catch (\Exception $e) {
            throw new BasicException(10001, json_encode($e->errors()));
        }

        $list = app('repo_version_management')->getList($request->input());

        return Response::sendList($list);
    }

    /**
     * 文件上传
     */
    public function uploadApk(Request $request)
    {
        set_time_limit(0);
        ini_set('memory_limit', '2048M');
        ini_set('upload_max_filesize','200M');
        ini_set('post_max_size','200M');
        ini_set('file_uploads','ON');
//        try {
//            $this->validate($request, [
//                'install_url' => 'required',
//            ]);
//
//        } catch (\Exception $e) {
//            throw new BasicException(10001, json_encode($e->errors()));
//        }
//        $params = $request->file();
//        if (!isset($params['install_url'])) {
//            throw new BasicException(10001, 'install_url参数错误');
//        }
//        if (!is_string($params['install_url'])) {
//            $frame1 = $request->file('install_url');
//            if ($frame1) {
//                $res = FileService::uploadFile($frame1, [], 'api/app', '', '');
//                if ($res) {
//                    return Response::sendData($res);
//                }
//            }
//        }

        //参数校验
        $v = app('validator')->make($request->all(),
            [
                'install_url' => 'required',
            ]
        );

        if ($v->fails()) throw new BasicException(10001,$v->errors()->first());

        $apk = $request->file('install_url');
        $res = ObsService::uploadFile($apk);

        return Response::sendData([
            "url" => $res,
        ]);
    }
}
